←
▼
▲
<SectionTree CurrentSectionNames="Sec1"/>
Function SectionTree::xml() as string
現在のセクションを返します。
サンプル
Dim section : Set section = new SectionTree
If section.Start( "Sec1" ) Then
echo section
End If : section.End_
出力例:
現在のセクションを表示します。 なお、echo に指定するときは xml を省略できます。
ファイル:
vbslib.vbs
テスト
→ T_SectionTree.vbs # [T_SectionTree_1]
→ T_SectionTree.vbs # [T_SectionTree_2]
(src)
←
▼
▲
旧仕様
←
▼
▲
Sub EchoTestStart( TestSymbol as string )
テストシンボルをエコー出力します。
EchoTestStart "T_Samp1"
((( [T_Samp1] )))
サンプル1
サンプルの出力
EchoTestStart tests.Symbol
サンプル2
(src)
や
を実行するときは、EchoTestStart 関数を呼ばなくても、自動
Test_start 関数の中で複数のテストをするときに、EchoTestStart 関数を使うと、テストのログ
が見やすくなります。
的にシンボルがエコー出力されます。
廃止予定です。
代用
←
▼
▲
SkipToSection Array( 5, 2 )
サンプル: セクション番号 5,2 から実行する( 5,1 より前は実行をスキップする。)
Sub SkipToSection( Num as integer )
指定した番号のセクションより前のセクションをスキップするように設定します。
【引数】
Num
次に実行するセクション番号
通常、メイン関数から呼び出します。
はじめは 0 を指定して、セクション番号を echo 出力させます。
次に、スキップしたいセクションを調べて、次に実行したいセクション番号を指定します。
SkipToSection 5
サンプル: セクション番号 5 から実行する( 5 より前は実行をスキップする。)
(src)
関連
セクション番号は、下記のように echo 出力されます。 SkipToSection を一度も呼んで
いないときや、スキップ中は出力されません。
<Section num='4'/>
テスト
一度も SkipToSection が呼ばれていないときは、グローバル変数 g_SkipSection が
Empty になっています。
サンプル: セクション番号を表示させない、かつ、実行のスキップをしない。
SkipToSection Empty
NotSkipSection にブレークポイントを張ると、セクションごとにブレークします。
←
▼
▲
(src)
Function SkipSection::Start() as boolean
Dim section : Set section = new SkipSection
If section.Start() Then '// section 1
:
section.End_
End If
If section.Start() Then '// section 2
If exist( "out.txt" ) Then '// 条件によって、しないことがある処理は、section の中へ
:
End If
section.End_
End If
サンプル:
本関数を呼び出した場所をセクションの開始場所とします。
テスト
→ T_SkipToSection フォルダ
←
▼
▲
Sub SkipSection::End_()
参考
←
▼
▲
(src)
Function NotSkipSection() as boolean
本関数を呼び出した場所をセクションの開始場所とします。
【引数】
返り値
SkipToSection で設定されたセクション以降かどうか
サンプル:
For Each i As arr
If NotSkipSection() Then
DoTest
End If
Next
本関数を呼び出すとセクション番号を+1します。
SkipToSection が呼ばれていたら、セクション番号を echo 出力します。
<Section num='5'/>
echo 出力の例:
廃止予定です。 SkipSection::Start 〜 End_ を使ってください
←
▼
▲
Sub SetBreakAtSection( Num )
指定のセクションでブレークするようにします。
(src)
←
▼
▲
Function GetSkipSectionGlobal() as SkipSectionGlobal
セクションを管理するオブジェクトを返します。
【引数】
返り値
セクションを管理するオブジェクト
ソース
→ vbslib.vbs
GetSkipSectionGlobal 関数
SkipSectionGlobal クラス
→ vbslib.vbs
セクションを開始する直前でコールバックする関数。
←
▼
▲
Sub SkipSectionGlobal::OnStart( CallbackObject as variant )
セクションを開始する直前でコールバックする関数。
【引数】
CallbackObject
GetSkipSectionGlobal().CallbackObject
Sub Main( Opt, AppKey )
Set ss = GetSkipSectionGlobal()
Set ss.OnStart = GetRef("CheckOnCallback")
Set ss.CallbackObject = Nothing
RunTestPrompt AppKey.NewWritable( "." )
End Sub
Sub CheckOnCallback( Argument1 )
echo "CheckOnCallback"
End Sub
サンプル
関連
セクションの開始を指定します。
←
▼
▲
Function call_vbs( path as string, func as string, param as variant )
指定した VBScript ファイルの中の関数を呼び出し、終了するまで待ちます。
【引数】
path
func
VBScript ファイルのパス
呼び出す関数の名前
path に環境変数を含めることができます。 (%var% 形式)
関数に渡すパラメータ
param
関数の返り値
返り値
現在のプロセスのまま、別の .vbs ファイルを呼び出します。
(src)
グローバル変数は、呼び出し先で宣言したものが、使えるようになります。
呼び出し先に関数を実行するときのカレントフォルダは、そのスクリプト
ファイルがあるフォルダになります。
path に相対パスを指定するときは注意が必要です。
call_vbs "%ProgramFiles%\Movie Maker\moviemk.vbs", "FuncA", ""
サンプル:
呼び出し先の関数は、次の型にしてください。
Function FuncA( Param )
(src)
は、で、グローバル領域を実行しているときだけでなく、呼び出す
関数を実行しているときも、path 引数に指定したパスのフル・パスが入ります。
←
▼
▲
(src)
ModuleC_pre.vbs
Dim g_FuncA : FuncRedir_add g_FuncA, "FuncA"
関数コールをリダイレクト(横取り)します。
ModuleC.vbs
Sub FuncA( Param1 )
If GetVar( "FuncA_Redir" ) = "Over" Then
echo "overrided"
Else
g_FuncA.CallSub1 Param1
End If
End Sub
FuncA
FuncA
FuncA
FuncA
FuncA
Sub FuncRedir_add( out_Redir as FuncRedir, Name as string )
上書きする前の関数を呼び出さないときは、FuncRedir_add を呼び出す必要はありません。
FuncRedir_add の第1引数に指定して取得したオブジェクト使って、上書きする前の関数を
呼び出します。
Sub FuncRedir::CallSub0()
Sub FuncRedir::CallSub1( Param1 )
Sub FuncRedir::CallSub2( Param1, Param2 )
Sub FuncRedir::CallSub3( Param1, Param2, Param3 )
Sub FuncRedir::CallSub4( Param1, Param2, Param3, Param4 )
Function FuncRedir::CallFunction0()
Function FuncRedir::CallFunction1( Param1 )
Function FuncRedir::CallFunction2( Param1, Param2 )
Function FuncRedir::CallFunction3( Param1, Param2, Param3 )
Function FuncRedir::CallFunction4( Param1, Param2, Param3, Param4 )
include "ModuleC_pre.vbs"
include "ModuleC.vbs"
上書きする前の関数を呼び出します。
テスト
→ T_FuncRedir.vbs
→ T_NameAdd_vbslib フォルダ
参考
→ マクロ・リダイレクト
関連
Sub FuncX()
Dim v_:Set v_= new VarStack
SetVar "FuncA_Redir", "Over"
FuncA
End Sub
ModuleX.vbs
リダイレクト先の関数が定義してあるスクリプト・ファイルと、別のファイルから FuncRedir_add
を呼び出してください。
たとえば、下記の ModuleC.vbs と ModuleC_pre.vbs のように分けてください。
そうしないと、リダイレクトする前の関数が上書きされた後で、FuncRedir_add が呼ばれる
ことになり、終わりのない再帰呼び出しになり、メモリ不足(スタック不足)のエラーになる
でしょう。
サンプル
Main.vbs
FuncRedir_add を呼び出すためのファイル
リダイレクト先
FuncA の呼び出し元
【引数】
out_Redir
Name
(出力)
リダイレクトされる関数の名前
FuncA 関数の定義をリダイレクトし、環境変数 FuncA_Redir の値によって、リダイレクト元か
リダイレクト先かのどちらかの FuncA 関数を呼び出すかを選べるようにします。
←
▼
▲
(src)
Function CallForEach0( Func as Function, Collection as array or variant )
Collection のそれぞれの要素を引数に渡して、関数 Func を複数回呼び出します。
【引数】
Func
Collection
呼び出す関数(GetRef使用)
配列、または単純変数、または Empty
関数に渡すパラメータ
Param1
Function CallForEach1( Func, Collection, Param1 as variant )
Function CallForEach2( Func, Collection, Param1 as variant, Param2 as variant )
キーワード:
サンプル:
返り値
関数 Func の返り値(Collection が単純変数のときのみ)
CallForEach2 GetRef("CallForEach_copy"), Array( "a.txt", "b.txt" ), "src", "dst"
上記コードは下記コードと同じ処理内容です。
CallForEach_copy "a.txt", "src", "dst"
CallForEach_copy "b.txt", "src", "dst"
関連
なるべく、CallForEach を使わずに、For ループを使って、それぞれの要素に対して
処理してください。
←
▼
▲
(src)
Sub CallForEach_copy( StepPath as string, FromFolderPath as string, ToFolderPath as string )
に使えるファイルコピーです。
【引数】
StepPath
FromFolderPath
ファイルへの相対パス。 基準は FromFolderPath と ToFolderPath
コピー元のフォルダ
コピー先のフォルダ
ToFolderPath
CallForEach2 GetRef("CallForEach_copy"), Array( "a.txt", "folder\*" ), "src", "dst"
上記コードは下記コードと同じ処理内容です。
copy "src\a.txt", "dst"
copy "src\folder\*", "dst\folder" '// copy "src\folder", "dst" と同じ
テスト
→ T_EachCopy.vbs # [T_EachCopy1]
フォルダーをコピーするとき、パスの末尾に "\*" があってもなくても構いません。
サンプル
ワイルドカードを使っても、サブ・フォルダーはコピーしません。
と組み合わせて
ください。
Set c = g_VBS_Lib
ExpandWildcard "src\*.doc", c.File or c.SubFolder, folder, step_paths
CallForEach2 GetRef("CallForEach_copy"), step_paths, "src", "dst"
関連
←
▼
▲
Sub CallForEach_move( FilePath, FromFolderPath, ToFolderPath )
に使えるファイルの移動です。
(src)
参考
←
▼
▲
Sub CallForEach_del( FilePath, FolderPath )
に使えるファイルまたはフォルダの削除です。
CallForEach1 GetRef("CallForEach_del"), Array( "a.txt", "folder\*" ), "folder"
上記コードは下記コードと同じ処理内容です。
del "folder\a.txt"
del "folder\folder\*"
サンプル
(src)
←
▼
▲
copy t_source, t_destination
t_source = "C:\From.txt"
t_destination = "C:\To.txt"
サンプル
文を実行する順番を入れ替えます。
たとえば、関数の引数の代入(詳細)を後で書くほうが可読性が上がるときに使います。
Transpose は、順番の入れ替えを示すだけで、何もしません。
上記のコードは、下記のコードと同じ処理を行います。
source = "C:\From.txt"
destination = "C:\To.txt"
copy source, destination
前半と後半(Transpose : Else の前後)をつなぐ変数の名前の先頭は、
t_ から始めるコーディング ルールを推奨します。
上記のコードは、説明のために後半が短いため、変数を介さないほうが読みやすいですが、
一般に後半が長いときは読みやすくなります。
Transpose : For i=0 To 1 : If i=1 Then
Else ' Transpose
Transpose : End If : Next
ソース
→ vbslib.vbs
←
▼
▲
Sub SetTaskStartTime( TaskName as string, StartTime as string )
タスク・スケジューラーに登録済みの、指定のタスクを開始する時刻を変更します。
echo "タスクの開始時間を再設定します。"
Dim name : name = input( "タスク名>" )
echo "例: 13:00 ... 今が午前10時なら、今日の午後1時に実行する"
echo "例: 1:00 ... 今が午前10時なら、明日の午前1時に実行する"
echo "例: +1:00 ... 今から1時間後に実行する"
Dim after : after = input( "いつ実行を開始しますか>" )
SetTaskStartTime name, after
SetTaskStartTime
サンプル
(src)
→ samples/TaskScheduler フォルダ
関連
→ schtasks /Create
StartTime の先頭を + にすると、現在の時刻からの差分を指定できます。
例) +1:30 … 1時間半後
←
▼
▲
Function GetTaskList( EmptyParam as Empty )
タスク・スケジューラーに登録済みの、タスクを一覧します。
返り値は、タスクの集合である辞書型です。
タスクの集合の Key は タスク名、Item は1つのタスクを表す辞書型です。
1つのタスクを表す辞書型の Key は タスクの属性名、Item は属性の値です。
Set tasks = GetTaskList( Empty )
Set task = tasks.Item( "\Task1" )
start task.Item( "実行するタスク" )
サンプル
(src)
→ schtasks /Query
参考
←
▼
▲
→ Makefile
参考
→ T_MakeRule フォルダ
テスト
make コマンドのように、ファイルのタイムスタンプを比較して、必要ならコマンドを実行します。
一般的なメイクファイルと、MakeFileClass との対応関係を示します。
Target.txt : Source1.txt Source2.txt
command
Target.txt が無いときか、Source1.txt または Source2.txt より古いときに、
command を実行します。 ただし、Source1.txt および Source2.txt に対する
ルールのコマンドを実行した後で実行します。
MakeFileClass では、次のように記述します。
Sub Main()
Set mk = new MakeFileClass
mk.AddRule new_Target_txt_Rule()
mk.Make
End Sub
Function new_Target_txt_Rule()
Set o = new MakeRule
o.Sources = Array( "Source1.txt", "Source2.txt" )
o.Target = "Target.txt"
Set o.Command = GetRef("Target_txt_Command")
Set new_Target_txt_Rule = o
End Function
Sub Target_txt_Command( Param, Rule )
copy_ren Rule.Sources(0), Rule.Target
End Sub
Target_txt
Target_txt
Target_txt
Target_txt
Target.txt
Source1.txt
Source2.txt
Target_txt
MakeRule の source と target の関係
MakeRule で実行するコマンド
File
最初に更新するファイル
サンプル
Target.txt
Source.txt
MakeRule を返す関数名
by new_Target_txt_Rule
生成する
一般的なメイクファイル (vbslibではない)
ここでは、メイクファイルで指定された「構成」を図に表すときの記法を示します。
凡例
Command
→ vbslib.vbs
ソース
すれば、
暗黙ルール
を作ることができます。
を設定して詳細な情報を確認してください。
うまく動作しないときは、
関連
→ CheckEnglishOnly_src\Test.vbs
ソースに更新があったときだけコピーする
←
▼
▲
メイクファイルの名前。
ユーザー定義の委譲先オブジェクト。
デバッグモード
デバッグモードのパラメーター
定数の集まり
メイクを実行します。
メイクファイルのルールを登録します。
(src)
サンプル
ユーザー定義変数の集まり。
←
▼
▲
Sub MakeFileClass::AddRule( a_MakeRule as MakeRule )
メイクファイルのルールを登録します。
a_MakeRule 引数に配列を指定することもできます。
←
▼
▲
Sub MakeFileClass::Make()
登録されているメイクファイルのルールに従って、メイクを実行します。